package com.ebei.admin.service;

import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.IService;
import com.ebei.admin.model.dto.UserDTO;
import com.ebei.admin.model.dto.UserInfo;
import com.ebei.admin.model.entity.SysUser;
import com.ebei.common.util.R;
import com.ebei.common.util.Result;
import com.ebei.common.vo.UserVO;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;
import java.util.Map;

/**
 * 用户接口
 *
 * @author crazypenguin
 * @version 1.0
 * @created 2018/4/17
 */
public interface SysUserService extends IService<SysUser> {

    /**
     * 根据用户账号查询用户信息
     * @param userAccount
     * @return
     */
    UserVO findUserByUserAccount(String userAccount);

    /**
     * 分页查询用户信息
     *
     * @param map 查询条件
     * @return
     */
    Result<Page> findByParam(Map<String, Object> map);

    /**
     * 查询用户信息
     *
     * @param userVo 角色名
     *
     * @return userInfo
     */
    UserInfo findUserInfo(UserVO userVo,Boolean isPc);

    /**
     * 保存验证码
     *  @param randomStr 随机串
     * @param imageCode 验证码*/
    void saveImageCode(String randomStr, String imageCode);

    /**
     * 删除用户
     * @param sysUser 用户
     * @return boolean
     */
    Boolean deleteUserById(SysUser sysUser);

    /**
     * 更新当前用户基本信息
     * @param userDto 用户信息
     * @param username 用户名
     * @return Boolean
     */
    Boolean updateUserInfo(UserDTO userDto, String username);

    /**
     * 更新指定用户信息
     * @param map 用户信息
     * @param username 用户信息
     * @return
     */
    Result updateUser(Map<String, Object> map, String username) throws Exception;

    /**
     * 通过手机号查询用户信息
     * @param mobile 手机号
     * @return 用户信息
     */
    UserVO findUserByMobile(String mobile);

    /**
     * 发送验证码
     * @param mobile 手机号
     * @return R
     */
    R<Boolean> sendSmsCode(String mobile);

    /**
     * 通过openId查询用户
     * @param openId openId
     * @return 用户信息
     */
    UserVO findUserByOpenId(String openId);

    /**
     * 通过ID查询用户信息
     * @param id 用户ID
     * @return 用户信息
     */
    UserVO selectUserVoById(Integer id);

    /**
     * 通过角色编码查询用户
     * @param params
     * @return
     */
    List<Map<String,Object>> findUsersByRoleCondition(Map<String, Object> params);

    /**
     * Excel文件上传的功能
     * @param rows 用户信息
     * @return
     */
    Boolean insertByList(List<Map<String, Object>> rows) throws Exception;

    /**
     * 禁用用户
     * @param id
     * @return
     */
    Result lock(Integer id);

    /**
     * 根据组织架构id获取人员列表
     * @param orgId
     * @return
     */
    Result findUserByOrgId(@RequestParam Integer orgId);

    /**
     * 获取用户 设备模块用
     * @param params
     * @return
     */
    Result<Page> getUsersForDevice(Map<String, Object> params);
}
